let arr=[
    {name:'张三',age:18,like:{n:'running'}},
    {name:'张三',age:18},
    {name:'李四',age:19},
    {name:'张三',age:18,like:{n:'running'}},
]
//直接转换为json字符串，但不能处理内部嵌套函数的情况

function unique(arr){
    let res=[]
    let has=false
    for(let i=0;i<arr.length;i++){
        for(let j=0;j<res.length;j++){
            if(equal(arr[i],res[j])){
                has=true
                break
            }
        }
        if(!has){
            res.push(arr[i])
        }
    }
    return res
}
function equal(v1,v2){
    //判断是否是对象
    if((typeof v1==='object'&&v1!==null) && (typeof v2==='object' && v2!==null)){
        if(Object.keys(v1).length!==Object.keys(v2).length){
            return false
        }
        for(let key in v1){
            // if(!v2.hasOwnProperty(key)){
            //     return false
            // }
            if(key in v2){//判断v2内有无v1中的key
                if(!equal(v1[key],v2[key])){//如果v1中的key在v2中，判断v1中的key和v2中的key是否相等
                    return false
                }
            }else{
                return false
            }
        }
        return true
    }else{//如果不是对象，直接比较
        return v1===v2
    }
}
console.log(unique(arr));

